package com.bysj.studentsystem.service.impl;

import com.bysj.studentsystem.vo.MenuTreeVO;
import com.bysj.studentsystem.dao.SysMenuDao;
import com.bysj.studentsystem.entity.SysMenu;
import com.bysj.studentsystem.service.SysMenuService;
import io.jsonwebtoken.lang.Collections;
import org.assertj.core.util.Lists;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * (SysMenu)表服务实现类
 *
 * @author makejava
 * @since 2024-03-09 16:51:49
 */
@Service("sysMenuService")
public class SysMenuServiceImpl implements SysMenuService {
    @Resource
    private SysMenuDao sysMenuDao;

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    @Override
    public SysMenu queryById(Integer id) {
        return this.sysMenuDao.queryById(id);
    }

    /**
     * 分页查询
     *
     * @return 查询结果
     */
    @Override
    public List<MenuTreeVO> queryByTree() {
        List<MenuTreeVO> treeVOS = bindChildren(null, null, 0);
        return treeVOS;
    }

    /**
     * 绑定菜单树
     * @param roleId
     * @param name
     * @param parentMenuId
     * @return
     */
    public List<MenuTreeVO> bindChildren(Integer roleId, String name, Integer parentMenuId){
        List<SysMenu> list = this.sysMenuDao.queryListByParentMenuId(roleId, parentMenuId);
        if (Collections.isEmpty(list)){
            return null;
        }else {
            List<MenuTreeVO> treeVOS = Lists.newArrayList();
            for (SysMenu menu : list){
                MenuTreeVO vo = new MenuTreeVO();
                vo.setId(menu.getId());
                vo.setName(menu.getName());
                vo.setPath(menu.getPath());
                vo.setFilePath(menu.getFilePath());
                vo.setChildren(bindChildren(null, menu.getName(), menu.getId()));
                treeVOS.add(vo);
            }
            return treeVOS;
        }
    }

    /**
     * 新增数据
     *
     * @param sysMenu 实例对象
     * @return 实例对象
     */
    @Override
    public SysMenu insert(SysMenu sysMenu) {
        this.sysMenuDao.insert(sysMenu);
        return sysMenu;
    }

    /**
     * 修改数据
     *
     * @param sysMenu 实例对象
     * @return 实例对象
     */
    @Override
    public SysMenu update(SysMenu sysMenu) {
        this.sysMenuDao.update(sysMenu);
        return this.queryById(sysMenu.getId());
    }

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */
    @Override
    public boolean deleteById(Integer id) {
        return this.sysMenuDao.deleteById(id) > 0;
    }
}
